package com.gprcclient.config;

import com.alibaba.cloud.nacos.ribbon.NacosServer;
import com.google.common.base.Optional;
import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.Server;
import com.netflix.loadbalancer.ZoneAvoidanceRule;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author: LCG
 * @date: 2022-10-27 18:11:38
 * @description: 自己定义ribbon的路由规则 使用feign 进行接口调用的时候起作用（grpc的时候测试无效）
 **/
public class HuiDuRule extends ZoneAvoidanceRule {

    @Override
    public Server choose(Object key) {

        //从这里就可以获取到metadata的数据
        List<Server> allServers = this.getLoadBalancer().getAllServers();

        //在这里进行自定义路由规则并返回对应的 allServers 中的某一个server
        List<Server> noHuidus=new ArrayList<>();
        for (Server allServer : allServers) {
            NacosServer nacosServer = (NacosServer) allServer;
            Map<String, String> metadata = nacosServer.getMetadata();
            if(metadata.get("huidu").equals("false")){
                noHuidus.add(nacosServer);
            }
        }

        //如何从一个server列表中循环取出一个
        Optional<Server> serverOptional = getPredicate().chooseRoundRobinAfterFiltering(noHuidus, key);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:m:ss");
        String format = simpleDateFormat.format(new Date());
        System.out.println(noHuidus.size()+"##########################"+format);
        return serverOptional.get();
    }
}
